home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.5)
-
- from __future__ import division
- import struct
- import cStringIO
- import xml.parsers.expat as expat
- from g import *
- from codes import *
- import pml
- import utils
- STATUS_REV_00 = 0
- STATUS_REV_01 = 1
- STATUS_REV_02 = 2
- STATUS_REV_03 = 3
- STATUS_REV_04 = 4
- STATUS_REV_V = 255
- STATUS_REV_UNKNOWN = 254
- vstatus_xlate = {
- 'busy': STATUS_PRINTER_BUSY,
- 'idle': STATUS_PRINTER_IDLE,
- 'prnt': STATUS_PRINTER_PRINTING,
- 'offf': STATUS_PRINTER_TURNING_OFF,
- 'rprt': STATUS_PRINTER_REPORT_PRINTING,
- 'cncl': STATUS_PRINTER_CANCELING,
- 'iost': STATUS_PRINTER_IO_STALL,
- 'dryw': STATUS_PRINTER_DRY_WAIT_TIME,
- 'penc': STATUS_PRINTER_PEN_CHANGE,
- 'oopa': STATUS_PRINTER_OUT_OF_PAPER,
- 'bnej': STATUS_PRINTER_BANNER_EJECT,
- 'bnmz': STATUS_PRINTER_BANNER_MISMATCH,
- 'phmz': STATUS_PRINTER_PHOTO_MISMATCH,
- 'dpmz': STATUS_PRINTER_DUPLEX_MISMATCH,
- 'pajm': STATUS_PRINTER_MEDIA_JAM,
- 'cars': STATUS_PRINTER_CARRIAGE_STALL,
- 'paps': STATUS_PRINTER_PAPER_STALL,
- 'penf': STATUS_PRINTER_PEN_FAILURE,
- 'erro': STATUS_PRINTER_HARD_ERROR,
- 'pwdn': STATUS_PRINTER_POWER_DOWN,
- 'fpts': STATUS_PRINTER_FRONT_PANEL_TEST,
- 'clno': STATUS_PRINTER_CLEAN_OUT_TRAY_MISSING }
- REVISION_2_TYPE_MAP = {
- 0: AGENT_TYPE_NONE,
- 1: AGENT_TYPE_BLACK,
- 2: AGENT_TYPE_CYAN,
- 3: AGENT_TYPE_MAGENTA,
- 4: AGENT_TYPE_YELLOW,
- 5: AGENT_TYPE_BLACK,
- 6: AGENT_TYPE_CYAN,
- 7: AGENT_TYPE_MAGENTA,
- 8: AGENT_TYPE_YELLOW }
- STATUS_BLOCK_UNKNOWN = {
- 'revision': STATUS_REV_UNKNOWN,
- 'agents': [],
- 'status-code': STATUS_UNKNOWN }
- NUM_PEN_POS = {
- STATUS_REV_00: 16,
- STATUS_REV_01: 16,
- STATUS_REV_02: 16,
- STATUS_REV_03: 18,
- STATUS_REV_04: 22 }
- PEN_DATA_SIZE = {
- STATUS_REV_00: 8,
- STATUS_REV_01: 8,
- STATUS_REV_02: 4,
- STATUS_REV_03: 8,
- STATUS_REV_04: 8 }
- STATUS_POS = {
- STATUS_REV_00: 14,
- STATUS_REV_01: 14,
- STATUS_REV_02: 14,
- STATUS_REV_03: 16,
- STATUS_REV_04: 20 }
-
- def parseSStatus(s, z = ''):
- Z_SIZE = 6
- z1 = []
- if len(z) > 0:
- z_fields = z.split(',')
- for z_field in z_fields:
- if len(z_field) > 2 and z_field[:2] == '05':
- z1s = z_field[2:]
- z1 = [ int(x, 16) for x in z1s ]
- continue
- []
-
-
- s1 = [ int(x, 16) for x in s ]
- revision = s1[1]
- if revision <= revision:
- pass
- elif not revision <= STATUS_REV_04:
- raise AssertionError
- []
- top_door = bool(s1[2] & 0x8L) + s1[2] & 0x1L
- supply_door = bool(s1[3] & 0x8L) + s1[3] & 0x1L
- duplexer = bool(s1[4] & 0xCL) + s1[4] & 0x1L
- photo_tray = bool(s1[5] & 0x8L) + s1[5] & 0x1L
- if revision == STATUS_REV_02:
- in_tray1 = bool(s1[6] & 0x8L) + s1[6] & 0x1L
- in_tray2 = bool(s1[7] & 0x8L) + s1[7] & 0x1L
- else:
- in_tray1 = bool(s1[6] & 0x8L)
- in_tray2 = bool(s1[7] & 0x8L)
- media_path = bool(s1[8] & 0x8L) + (s1[8] & 0x1L) + (bool(s1[18] & 0x2L) << 1)
- status_pos = STATUS_POS[revision]
- status_byte = (s1[status_pos] << 4) + s1[status_pos + 1]
- stat = status_byte + STATUS_PRINTER_BASE
- (pens, pen, c, d) = ([], { }, NUM_PEN_POS[revision] + 1, 0)
- num_pens = s1[NUM_PEN_POS[revision]]
- log.debug('Num pens=%d' % num_pens)
- index = 0
- pen_data_size = PEN_DATA_SIZE[revision]
- for p in range(num_pens):
- info = long(s[c:c + pen_data_size], 16)
- pen['index'] = index
- if pen_data_size == 4:
- pen['type'] = REVISION_2_TYPE_MAP.get(int((info & 0xF000L) >> 0xCL), 0)
- if index < num_pens / 2:
- pen['kind'] = AGENT_KIND_HEAD
- else:
- pen['kind'] = AGENT_KIND_SUPPLY
- pen['level-trigger'] = int((info & 0xE00L) >> 0x9L)
- pen['health'] = int((info & 0x180L) >> 0x7L)
- pen['level'] = int(info & 0x7FL)
- pen['id'] = 31
- elif pen_data_size == 8:
- pen['kind'] = bool(info & 0x80000000L) + (bool(info & 0x40000000L) << 0x1L)
- pen['type'] = int((info & 0x3F000000L) >> 0x18L)
- pen['id'] = int((info & 16252928) >> 0x13L)
- pen['level-trigger'] = int((info & 0x70000L) >> 0x10L)
- pen['health'] = int((info & 0xC000L) >> 0xEL)
- pen['level'] = int(info & 0xFFL)
- else:
- log.error('Pen data size error')
- if len(z1) > 0:
-
- try:
- pen['dvc'] = long(z1s[d + 1:d + 5], 16)
- pen['virgin'] = bool(z1[d + 5] & 0x8L)
- pen['hp-ink'] = bool(z1[d + 5] & 0x4L)
- pen['known'] = bool(z1[d + 5] & 0x2L)
- pen['ack'] = bool(z1[d + 5] & 0x1L)
- except IndexError:
- pen['dvc'] = 0
- pen['virgin'] = 0
- pen['hp-ink'] = 0
- pen['known'] = 0
- pen['ack'] = 0
- except:
- None<EXCEPTION MATCH>IndexError
-
-
- None<EXCEPTION MATCH>IndexError
- index += 1
- pens.append(pen)
- pen = { }
- c += pen_data_size
- d += Z_SIZE
-
- return {
- 'revision': revision,
- 'agents': pens,
- 'top-door': top_door,
- 'status-code': stat,
- 'supply-door': supply_door,
- 'duplexer': duplexer,
- 'photo-tray': photo_tray,
- 'in-tray1': in_tray1,
- 'in-tray2': in_tray2,
- 'media-path': media_path }
-
-
- def parseVStatus(s):
- pens = []
- pen = { }
- c = 0
- fields = s.split(',')
- f0 = fields[0]
- if len(f0) == 20:
- pass
- elif len(f0) == 8:
- for p in f0:
- if c == 0:
- c += 1
- continue
- if c == 1:
- if p in ('a', 'A'):
- pen['type'] = AGENT_TYPE_NONE
- pen['kind'] = AGENT_KIND_NONE
-
- c += 1
- continue
- if c == 2:
- pen['health'] = AGENT_HEALTH_OK
- pen['kind'] = AGENT_KIND_HEAD_AND_SUPPLY
- if p in ('b', 'B'):
- pen['type'] = AGENT_TYPE_BLACK
- elif p in ('c', 'C'):
- pen['type'] = AGENT_TYPE_CMY
- elif p in ('d', 'D'):
- pen['type'] = AGENT_TYPE_KCM
- elif p in ('u', 'U'):
- pen['type'] = AGENT_TYPE_NONE
- pen['health'] = AGENT_HEALTH_MISINSTALLED
-
- c += 1
- continue
- if c == 3:
- if p == '0':
- pen['state'] = 1
- else:
- pen['state'] = 0
- pen['level'] = 0
- i = 8
- while True:
-
- try:
- f = fields[i]
- except IndexError:
- break
-
- if f[:2] == 'KP' and pen['type'] == AGENT_TYPE_BLACK:
- pen['level'] = int(f[2:])
- elif f[:2] == 'CP' and pen['type'] == AGENT_TYPE_CMY:
- pen['level'] = int(f[2:])
-
- i += 1
- pens.append(pen)
- pen = { }
- c = 0
- continue
-
-
- if fields[2] == 'DN':
- top_lid = 1
- else:
- top_lid = 2
- stat = vstatus_xlate.get(fields[3].lower(), STATUS_PRINTER_IDLE)
- return {
- 'revision': STATUS_REV_V,
- 'agents': pens,
- 'top-lid': top_lid,
- 'status-code': stat,
- 'supply-lid': SUPPLY_DOOR_NOT_PRESENT,
- 'duplexer': DUPLEXER_NOT_PRESENT,
- 'photo-tray': PHOTO_TRAY_NOT_PRESENT,
- 'in-tray1': IN_TRAY_NOT_PRESENT,
- 'in-tray2': IN_TRAY_NOT_PRESENT,
- 'media-path': MEDIA_PATH_CUT_SHEET }
-
-
- def parseStatus(DeviceID):
- if 'VSTATUS' in DeviceID:
- return parseVStatus(DeviceID['VSTATUS'])
- elif 'S' in DeviceID:
- return parseSStatus(DeviceID['S'], DeviceID.get('Z', ''))
- else:
- return STATUS_BLOCK_UNKNOWN
-
-
- def LaserJetDeviceStatusToPrinterStatus(device_status, printer_status, detected_error_state):
- stat = STATUS_PRINTER_IDLE
- if device_status in (pml.DEVICE_STATUS_WARNING, pml.DEVICE_STATUS_DOWN):
- if detected_error_state & pml.DETECTED_ERROR_STATE_LOW_PAPER_MASK and not (detected_error_state & pml.DETECTED_ERROR_STATE_NO_PAPER_MASK):
- stat = STATUS_PRINTER_LOW_PAPER
- elif detected_error_state & pml.DETECTED_ERROR_STATE_NO_PAPER_MASK:
- stat = STATUS_PRINTER_OUT_OF_PAPER
- elif detected_error_state & pml.DETECTED_ERROR_STATE_DOOR_OPEN_MASK:
- stat = STATUS_PRINTER_DOOR_OPEN
- elif detected_error_state & pml.DETECTED_ERROR_STATE_JAMMED_MASK:
- stat = STATUS_PRINTER_MEDIA_JAM
- elif detected_error_state & pml.DETECTED_ERROR_STATE_OUT_CART_MASK:
- stat = STATUS_PRINTER_NO_TONER
- elif detected_error_state & pml.DETECTED_ERROR_STATE_LOW_CART_MASK:
- stat = STATUS_PRINTER_LOW_TONER
- elif detected_error_state == pml.DETECTED_ERROR_STATE_SERVICE_REQUEST_MASK:
- stat = STATUS_PRINTER_SERVICE_REQUEST
- elif detected_error_state & pml.DETECTED_ERROR_STATE_OFFLINE_MASK:
- stat = STATUS_PRINTER_OFFLINE
-
- elif printer_status == pml.PRINTER_STATUS_IDLE:
- stat = STATUS_PRINTER_IDLE
- elif printer_status == pml.PRINTER_STATUS_PRINTING:
- stat = STATUS_PRINTER_PRINTING
- elif printer_status == pml.PRINTER_STATUS_WARMUP:
- stat = STATUS_PRINTER_WARMING_UP
-
- return stat
-
- COLORANT_INDEX_TO_AGENT_TYPE_MAP = {
- 'other': AGENT_TYPE_UNSPECIFIED,
- 'unknown': AGENT_TYPE_UNSPECIFIED,
- 'blue': AGENT_TYPE_BLUE,
- 'cyan': AGENT_TYPE_CYAN,
- 'magenta': AGENT_TYPE_MAGENTA,
- 'yellow': AGENT_TYPE_YELLOW,
- 'black': AGENT_TYPE_BLACK }
- MARKER_SUPPLES_TYPE_TO_AGENT_KIND_MAP = {
- pml.OID_MARKER_SUPPLIES_TYPE_OTHER: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_UNKNOWN: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_TONER: AGENT_KIND_TONER_CARTRIDGE,
- pml.OID_MARKER_SUPPLIES_TYPE_WASTE_TONER: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_INK: AGENT_KIND_SUPPLY,
- pml.OID_MARKER_SUPPLIES_TYPE_INK_CART: AGENT_KIND_HEAD_AND_SUPPLY,
- pml.OID_MARKER_SUPPLIES_TYPE_INK_RIBBON: AGENT_KIND_HEAD_AND_SUPPLY,
- pml.OID_MARKER_SUPPLIES_TYPE_WASTE_INK: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_OPC: AGENT_KIND_DRUM_KIT,
- pml.OID_MARKER_SUPPLIES_TYPE_DEVELOPER: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_FUSER_OIL: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_SOLID_WAX: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_RIBBON_WAX: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_WASTE_WAX: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_FUSER: AGENT_KIND_MAINT_KIT,
- pml.OID_MARKER_SUPPLIES_TYPE_CORONA_WIRE: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_FUSER_OIL_WICK: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_CLEANER_UNIT: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_FUSER_CLEANING_PAD: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_TRANSFER_UNIT: AGENT_KIND_TRANSFER_KIT,
- pml.OID_MARKER_SUPPLIES_TYPE_TONER_CART: AGENT_KIND_TONER_CARTRIDGE,
- pml.OID_MARKER_SUPPLIES_TYPE_FUSER_OILER: AGENT_KIND_UNKNOWN,
- pml.OID_MARKER_SUPPLIES_TYPE_ADF_MAINT_KIT: AGENT_KIND_ADF_KIT }
-
- def StatusType3(dev, parsedID):
-
- try:
- dev.openPML()
- (result_code, on_off_line) = dev.getPML(pml.OID_ON_OFF_LINE, pml.INT_SIZE_BYTE)
- (result_code, sleep_mode) = dev.getPML(pml.OID_SLEEP_MODE, pml.INT_SIZE_BYTE)
- (result_code, printer_status) = dev.getPML(pml.OID_PRINTER_STATUS, pml.INT_SIZE_BYTE)
- (result_code, device_status) = dev.getPML(pml.OID_DEVICE_STATUS, pml.INT_SIZE_BYTE)
- (result_code, cover_status) = dev.getPML(pml.OID_COVER_STATUS, pml.INT_SIZE_BYTE)
- (result_code, value) = dev.getPML(pml.OID_DETECTED_ERROR_STATE)
- except Error:
- dev.closePML()
- return {
- 'revision': STATUS_REV_UNKNOWN,
- 'agents': [],
- 'top-door': 0,
- 'status-code': STATUS_UNKNOWN,
- 'supply-door': 0,
- 'duplexer': 1,
- 'photo-tray': 0,
- 'in-tray1': 0,
- 'in-tray2': 0,
- 'media-path': 0 }
-
-
- try:
- detected_error_state = struct.unpack('B', value[0])[0]
- except IndexError:
- detected_error_state = pml.DETECTED_ERROR_STATE_OFFLINE_MASK
-
- agents = []
- x = 1
- while True:
- log.debug('%s Agent: %d %s' % ('**********', x, '**********'))
- log.debug('OID_MARKER_SUPPLIES_TYPE_%d:' % x)
- oid = (pml.OID_MARKER_SUPPLIES_TYPE_x % x, pml.OID_MARKER_SUPPLIES_TYPE_x_TYPE)
- (result_code, value) = dev.getPML(oid, pml.INT_SIZE_BYTE)
- if result_code != ERROR_SUCCESS or value is None:
- log.debug('End of supply information.')
- break
-
- for a in MARKER_SUPPLES_TYPE_TO_AGENT_KIND_MAP:
- if value == a:
- agent_kind = MARKER_SUPPLES_TYPE_TO_AGENT_KIND_MAP[a]
- break
- continue
- else:
- agent_kind = AGENT_KIND_UNKNOWN
- log.debug('OID_MARKER_SUPPLIES_LEVEL_%d:' % x)
- oid = (pml.OID_MARKER_SUPPLIES_LEVEL_x % x, pml.OID_MARKER_SUPPLIES_LEVEL_x_TYPE)
- (result_code, agent_level) = dev.getPML(oid)
- if result_code != ERROR_SUCCESS:
- log.debug('Failed')
- break
-
- log.debug('agent%d-level: %d' % (x, agent_level))
- log.debug('OID_MARKER_SUPPLIES_MAX_%d:' % x)
- oid = (pml.OID_MARKER_SUPPLIES_MAX_x % x, pml.OID_MARKER_SUPPLIES_MAX_x_TYPE)
- (result_code, agent_max) = dev.getPML(oid)
- if agent_max == 0:
- agent_max = 1
-
- if result_code != ERROR_SUCCESS:
- log.debug('Failed')
- break
-
- log.debug('agent%d-max: %d' % (x, agent_max))
- log.debug('OID_MARKER_SUPPLIES_COLORANT_INDEX_%d:' % x)
- oid = (pml.OID_MARKER_SUPPLIES_COLORANT_INDEX_x % x, pml.OID_MARKER_SUPPLIES_COLORANT_INDEX_x_TYPE)
- (result_code, colorant_index) = dev.getPML(oid)
- if result_code != ERROR_SUCCESS:
- log.debug('Failed')
- agent_type = AGENT_TYPE_BLACK
- else:
- log.debug('Colorant index: %d' % colorant_index)
- log.debug('OID_MARKER_COLORANT_VALUE_%d' % x)
- oid = (pml.OID_MARKER_COLORANT_VALUE_x % colorant_index, pml.OID_MARKER_COLORANT_VALUE_x_TYPE)
- (result_code, colorant_value) = dev.getPML(oid)
- if result_code != ERROR_SUCCESS:
- log.debug('Failed. Defaulting to black.')
- agent_type = AGENT_TYPE_BLACK
-
- if agent_kind in (AGENT_KIND_MAINT_KIT, AGENT_KIND_ADF_KIT, AGENT_KIND_DRUM_KIT, AGENT_KIND_TRANSFER_KIT):
- agent_type = AGENT_TYPE_UNSPECIFIED
- else:
- agent_type = AGENT_TYPE_BLACK
- if result_code != ERROR_SUCCESS:
- log.debug('OID_MARKER_SUPPLIES_DESCRIPTION_%d:' % x)
- oid = (pml.OID_MARKER_SUPPLIES_DESCRIPTION_x % x, pml.OID_MARKER_SUPPLIES_DESCRIPTION_x_TYPE)
- (result_code, colorant_value) = dev.getPML(oid)
- if result_code != ERROR_SUCCESS:
- log.debug('Failed')
- break
-
- if colorant_value is not None:
- log.debug('colorant value: %s' % colorant_value)
- colorant_value = colorant_value.lower().strip()
- for c in COLORANT_INDEX_TO_AGENT_TYPE_MAP:
- if colorant_value.find(c) >= 0:
- agent_type = COLORANT_INDEX_TO_AGENT_TYPE_MAP[c]
- break
- continue
- else:
- agent_type = AGENT_TYPE_BLACK
-
- elif colorant_value is not None:
- log.debug('colorant value: %s' % colorant_value)
- agent_type = COLORANT_INDEX_TO_AGENT_TYPE_MAP.get(colorant_value, AGENT_TYPE_BLACK)
-
- if agent_type == AGENT_TYPE_NONE:
- if agent_kind == AGENT_KIND_TONER_CARTRIDGE:
- agent_type = AGENT_TYPE_BLACK
- else:
- agent_type = AGENT_TYPE_UNSPECIFIED
-
- log.debug('OID_MARKER_STATUS_%d:' % x)
- oid = (pml.OID_MARKER_STATUS_x % x, pml.OID_MARKER_STATUS_x_TYPE)
- (result_code, agent_status) = dev.getPML(oid)
- if result_code != ERROR_SUCCESS:
- log.debug('Failed')
- agent_trigger = AGENT_LEVEL_TRIGGER_SUFFICIENT_0
- agent_health = AGENT_HEALTH_OK
- else:
- agent_trigger = AGENT_LEVEL_TRIGGER_SUFFICIENT_0
- if agent_status is None:
- agent_health = AGENT_HEALTH_OK
- elif agent_status == pml.OID_MARKER_STATUS_OK:
- agent_health = AGENT_HEALTH_OK
- elif agent_status == pml.OID_MARKER_STATUS_MISINSTALLED:
- agent_health = AGENT_HEALTH_MISINSTALLED
- elif agent_status in (pml.OID_MARKER_STATUS_LOW_TONER_CONT, pml.OID_MARKER_STATUS_LOW_TONER_STOP):
- agent_health = AGENT_HEALTH_OK
- agent_trigger = AGENT_LEVEL_TRIGGER_MAY_BE_LOW
- else:
- agent_health = AGENT_HEALTH_OK
- agent_level = int((agent_level / agent_max) * 100)
- log.debug('agent%d: kind=%d, type=%d, health=%d, level=%d, level-trigger=%d' % (x, agent_kind, agent_type, agent_health, agent_level, agent_trigger))
- agents.append({
- 'kind': agent_kind,
- 'type': agent_type,
- 'health': agent_health,
- 'level': agent_level,
- 'level-trigger': agent_trigger })
- x += 1
- log.debug('on_off_line=%d' % on_off_line)
- log.debug('sleep_mode=%d' % sleep_mode)
- log.debug('printer_status=%d' % printer_status)
- log.debug('device_status=%d' % device_status)
- log.debug('cover_status=%d' % cover_status)
- log.debug('detected_error_state=%d (0x%x)' % (detected_error_state, detected_error_state))
- stat = LaserJetDeviceStatusToPrinterStatus(device_status, printer_status, detected_error_state)
- log.debug('Printer status=%d' % stat)
- if stat == STATUS_PRINTER_DOOR_OPEN:
- supply_door = 0
- else:
- supply_door = 1
- return {
- 'revision': STATUS_REV_UNKNOWN,
- 'agents': agents,
- 'top-door': cover_status,
- 'status-code': stat,
- 'supply-door': supply_door,
- 'duplexer': 1,
- 'photo-tray': 0,
- 'in-tray1': 1,
- 'in-tray2': 1,
- 'media-path': 1 }
-
-
- def setup_panel_translator():
- global PANEL_TRANSLATOR_FUNC
- printables = list('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~')
- map = { }
- for x in range(0, 256):
- pass
-
- map.update({
- '\x10': '\xab',
- '\x11': '\xbb',
- '\x12': '\xa3',
- '\x13': '\xbb',
- '\x80': '\xab',
- '\x81': '\xbb',
- '\x82': '*',
- '\x83': '*',
- '\x85': '*',
- '\xa0': '\xab',
- '\x1f': '?',
- '=': ' ' })
- (frm, to) = ('', '')
- map_keys = map.keys()
- map_keys.sort()
- for x in map_keys:
- frm = ''.join([
- frm,
- x])
- to = ''.join([
- to,
- map[x]])
-
- PANEL_TRANSLATOR_FUNC = utils.Translator(frm, to)
-
- PANEL_TRANSLATOR_FUNC = None
- setup_panel_translator()
-
- def PanelCheck(dev):
- (line1, line2) = ('', '')
-
- try:
- dev.openPML()
- except Error:
- pass
-
- oids = [
- (pml.OID_HP_LINE1, pml.OID_HP_LINE2),
- (pml.OID_SPM_LINE1, pml.OID_SPM_LINE2)]
- for oid1, oid2 in oids:
- (result, line1) = dev.getPML(oid1)
- if result < pml.ERROR_MAX_OK:
- line1 = PANEL_TRANSLATOR_FUNC(line1).rstrip()
- if '\n' in line1:
- (line1, line2) = line1.split('\n', 1)
- break
-
- (result, line2) = dev.getPML(oid2)
- if result < pml.ERROR_MAX_OK:
- line2 = PANEL_TRANSLATOR_FUNC(line2).rstrip()
- break
-
- result < pml.ERROR_MAX_OK
-
- if not line1:
- pass
- if not line1:
- pass
- if not line2:
- pass
- return (bool(line2), '', '')
-
- BATTERY_HEALTH_MAP = {
- 0: AGENT_HEALTH_OK,
- 1: AGENT_HEALTH_OVERTEMP,
- 2: AGENT_HEALTH_CHARGING,
- 3: AGENT_HEALTH_MISINSTALLED,
- 4: AGENT_HEALTH_FAILED }
- BATTERY_TRIGGER_MAP = {
- 0: AGENT_LEVEL_TRIGGER_SUFFICIENT_0,
- 1: AGENT_LEVEL_TRIGGER_ALMOST_DEFINITELY_OUT,
- 2: AGENT_LEVEL_TRIGGER_PROBABLY_OUT,
- 3: AGENT_LEVEL_TRIGGER_SUFFICIENT_4,
- 4: AGENT_LEVEL_TRIGGER_SUFFICIENT_2,
- 5: AGENT_LEVEL_TRIGGER_SUFFICIENT_0 }
- BATTERY_PML_TRIGGER_MAP = {
- (100, 80): AGENT_LEVEL_TRIGGER_SUFFICIENT_0,
- (79, 60): AGENT_LEVEL_TRIGGER_SUFFICIENT_1,
- (59, 40): AGENT_LEVEL_TRIGGER_SUFFICIENT_2,
- (39, 30): AGENT_LEVEL_TRIGGER_SUFFICIENT_3,
- (29, 20): AGENT_LEVEL_TRIGGER_SUFFICIENT_4,
- (19, 10): AGENT_LEVEL_TRIGGER_MAY_BE_LOW,
- (9, 5): AGENT_LEVEL_TRIGGER_PROBABLY_OUT,
- (4, -1): AGENT_LEVEL_TRIGGER_ALMOST_DEFINITELY_OUT }
-
- def BatteryCheck(dev, status_block):
- try_dynamic_counters = False
-
- try:
- dev.openPML()
- except Error:
- log.debug('PML channel open failed. Trying dynamic counters...')
- try_dynamic_counters = True
- else:
- (result, battery_level) = dev.getPML(pml.OID_BATTERY_LEVEL)
- (result, power_mode) = dev.getPML(pml.OID_POWER_MODE)
- if battery_level is not None and power_mode is not None:
- if power_mode & pml.POWER_MODE_BATTERY_LEVEL_KNOWN and battery_level >= 0:
- for x in BATTERY_PML_TRIGGER_MAP:
- if battery_level >= battery_level:
- pass
- elif battery_level > x[1]:
- battery_trigger_level = BATTERY_PML_TRIGGER_MAP[x]
- break
- continue
-
- if power_mode & pml.POWER_MODE_CHARGING:
- agent_health = AGENT_HEALTH_CHARGING
- elif power_mode & pml.POWER_MODE_DISCHARGING:
- agent_health = AGENT_HEALTH_DISCHARGING
- else:
- agent_health = AGENT_HEALTH_OK
- status_block['agents'].append({
- 'kind': AGENT_KIND_INT_BATTERY,
- 'type': AGENT_TYPE_UNSPECIFIED,
- 'health': agent_health,
- 'level': battery_level,
- 'level-trigger': battery_trigger_level })
- else:
- status_block['agents'].append({
- 'kind': AGENT_KIND_INT_BATTERY,
- 'type': AGENT_TYPE_UNSPECIFIED,
- 'health': AGENT_HEALTH_UNKNOWN,
- 'level': 0,
- 'level-trigger': AGENT_LEVEL_TRIGGER_SUFFICIENT_0 })
- else:
- try_dynamic_counters = True
- dev.closePML()
-
-
-
- def getPenConfiguration(s):
- pens = [ p['type'] for p in s['agents'] ]
- if AGENT_TYPE_NONE in pens:
- if AGENT_TYPE_BLACK in pens:
- return AGENT_CONFIG_BLACK_ONLY
- elif AGENT_TYPE_CMY in pens:
- return AGENT_CONFIG_COLOR_ONLY
- elif AGENT_TYPE_KCM in pens:
- return AGENT_CONFIG_PHOTO_ONLY
- elif AGENT_TYPE_GGK in pens:
- return AGENT_CONFIG_GREY_ONLY
- else:
- return AGENT_CONFIG_INVALID
- elif AGENT_TYPE_BLACK in pens and AGENT_TYPE_CMY in pens:
- return AGENT_CONFIG_COLOR_AND_BLACK
- elif AGENT_TYPE_CMY in pens and AGENT_TYPE_KCM in pens:
- return AGENT_CONFIG_COLOR_AND_PHOTO
- elif AGENT_TYPE_CMY in pens and AGENT_TYPE_GGK in pens:
- return AGENT_CONFIG_COLOR_AND_GREY
- else:
- return AGENT_CONFIG_INVALID
-
-
- def getFaxStatus(dev):
- tx_active = False
- rx_active = False
-
- try:
- dev.openPML()
- (result_code, tx_state) = dev.getPML(pml.OID_FAXJOB_TX_STATUS)
- if result_code == ERROR_SUCCESS:
- if tx_state not in (pml.FAXJOB_TX_STATUS_IDLE, pml.FAXJOB_TX_STATUS_DONE):
- tx_active = True
-
-
- (result_code, rx_state) = dev.getPML(pml.OID_FAXJOB_RX_STATUS)
- if result_code == ERROR_SUCCESS:
- if rx_state not in (pml.FAXJOB_RX_STATUS_IDLE, pml.FAXJOB_RX_STATUS_DONE):
- rx_active = True
-
- finally:
- dev.closePML()
-
- return (tx_active, rx_active)
-
- TYPE6_STATUS_CODE_MAP = {
- 0: STATUS_PRINTER_IDLE,
- -19928: STATUS_PRINTER_IDLE,
- -18995: STATUS_PRINTER_CANCELING,
- -17974: STATUS_PRINTER_WARMING_UP,
- -17973: STATUS_PRINTER_PEN_CLEANING,
- -18993: STATUS_PRINTER_BUSY,
- -17949: STATUS_PRINTER_BUSY,
- -19720: STATUS_PRINTER_MANUAL_DUPLEX_BLOCK,
- -19678: STATUS_PRINTER_BUSY,
- -19695: STATUS_PRINTER_OUT_OF_PAPER,
- -17985: STATUS_PRINTER_MEDIA_JAM,
- -19731: STATUS_PRINTER_OUT_OF_PAPER,
- -18974: STATUS_PRINTER_BUSY,
- -19730: STATUS_PRINTER_OUT_OF_PAPER,
- -19729: STATUS_PRINTER_OUT_OF_PAPER,
- -19933: STATUS_PRINTER_HARD_ERROR,
- -17984: STATUS_PRINTER_DOOR_OPEN,
- -19694: STATUS_PRINTER_DOOR_OPEN,
- -18992: STATUS_PRINTER_MANUAL_FEED_BLOCKED,
- -19690: STATUS_PRINTER_MEDIA_JAM,
- -19689: STATUS_PRINTER_MEDIA_JAM,
- -19611: STATUS_PRINTER_MEDIA_JAM,
- -19686: STATUS_PRINTER_MEDIA_JAM,
- -19688: STATUS_PRINTER_MEDIA_JAM,
- -19685: STATUS_PRINTER_MEDIA_JAM,
- -19684: STATUS_PRINTER_MEDIA_JAM,
- -18848: STATUS_PRINTER_MEDIA_JAM,
- -18847: STATUS_PRINTER_MEDIA_JAM,
- -18846: STATUS_PRINTER_MEDIA_JAM,
- -19687: STATUS_PRINTER_MEDIA_JAM,
- -17992: STATUS_PRINTER_MEDIA_JAM,
- -19700: STATUS_PRINTER_HARD_ERROR,
- -17996: STATUS_PRINTER_FUSER_ERROR,
- -17983: STATUS_PRINTER_FUSER_ERROR,
- -17982: STATUS_PRINTER_FUSER_ERROR,
- -17981: STATUS_PRINTER_FUSER_ERROR,
- -17971: STATUS_PRINTER_FUSER_ERROR,
- -17995: STATUS_PRINTER_HARD_ERROR,
- -17994: STATUS_PRINTER_HARD_ERROR,
- -17993: STATUS_PRINTER_HARD_ERROR,
- -18994: STATUS_PRINTER_HARD_ERROR,
- -17986: STATUS_PRINTER_HARD_ERROR,
- -19904: STATUS_PRINTER_HARD_ERROR,
- -19701: STATUS_PRINTER_NON_HP_INK,
- -19613: STATUS_PRINTER_IDLE,
- -19654: STATUS_PRINTER_NON_HP_INK,
- -19682: STATUS_PRINTER_HARD_ERROR,
- -19693: STATUS_PRINTER_IDLE,
- -19752: STATUS_PRINTER_LOW_TONER,
- -19723: STATUS_PRINTER_BUSY,
- -19703: STATUS_PRINTER_BUSY,
- -19739: STATUS_PRINTER_NO_TONER,
- -19927: STATUS_PRINTER_BUSY,
- -19932: STATUS_PRINTER_BUSY,
- -19931: STATUS_PRINTER_BUSY,
- -11989: STATUS_PRINTER_BUSY,
- -11995: STATUS_PRINTER_BUSY,
- -19954: STATUS_PRINTER_CANCELING,
- -19955: STATUS_PRINTER_REPORT_PRINTING,
- -19956: STATUS_PRINTER_REPORT_PRINTING,
- -19934: STATUS_PRINTER_HARD_ERROR,
- -19930: STATUS_PRINTER_BUSY,
- -11990: STATUS_PRINTER_DOOR_OPEN,
- -11999: STATUS_PRINTER_MEDIA_JAM,
- -12000: STATUS_PRINTER_MEDIA_JAM,
- -11998: STATUS_PRINTER_MEDIA_JAM,
- -11986: STATUS_PRINTER_HARD_ERROR,
- -11994: STATUS_PRINTER_BUSY,
- -14967: STATUS_PRINTER_BUSY,
- -19912: STATUS_PRINTER_HARD_ERROR,
- -14962: STATUS_PRINTER_BUSY,
- -14971: STATUS_PRINTER_BUSY,
- -14973: STATUS_PRINTER_BUSY,
- -14972: STATUS_PRINTER_BUSY,
- -14966: STATUS_PRINTER_DOOR_OPEN,
- -14974: STATUS_PRINTER_MEDIA_JAM,
- -14969: STATUS_PRINTER_HARD_ERROR,
- -14968: STATUS_PRINTER_HARD_ERROR,
- -12996: STATUS_PRINTER_BUSY,
- -12994: STATUS_PRINTER_BUSY,
- -12993: STATUS_PRINTER_BUSY,
- -12991: STATUS_PRINTER_BUSY,
- -12995: STATUS_PRINTER_BUSY,
- -12997: STATUS_PRINTER_HARD_ERROR,
- -12990: STATUS_PRINTER_BUSY,
- -12998: STATUS_PRINTER_BUSY,
- -13000: STATUS_PRINTER_DOOR_OPEN,
- -12999: STATUS_PRINTER_MEDIA_JAM,
- -13859: STATUS_PRINTER_BUSY,
- -13858: STATUS_PRINTER_BUSY,
- -13868: STATUS_PRINTER_BUSY,
- -13867: STATUS_PRINTER_BUSY,
- -13857: STATUS_PRINTER_BUSY,
- -13856: STATUS_PRINTER_BUSY,
- -13855: STATUS_PRINTER_BUSY,
- -13854: STATUS_PRINTER_BUSY,
- -13853: STATUS_PRINTER_BUSY,
- -13839: STATUS_PRINTER_BUSY,
- -13842: STATUS_PRINTER_BUSY,
- -13838: STATUS_PRINTER_BUSY,
- -13847: STATUS_PRINTER_BUSY,
- -13846: STATUS_PRINTER_BUSY,
- -13845: STATUS_PRINTER_BUSY,
- -13844: STATUS_PRINTER_BUSY,
- -13840: STATUS_PRINTER_BUSY,
- -13843: STATUS_PRINTER_BUSY,
- -13850: STATUS_PRINTER_BUSY,
- -13851: STATUS_PRINTER_BUSY,
- -13836: STATUS_PRINTER_BUSY,
- -13864: STATUS_PRINTER_BUSY,
- -13863: STATUS_PRINTER_BUSY,
- -13865: STATUS_PRINTER_BUSY,
- -13862: STATUS_PRINTER_BUSY,
- -13837: STATUS_PRINTER_BUSY,
- -13861: STATUS_PRINTER_BUSY,
- -13866: STATUS_PRINTER_BUSY,
- -13841: STATUS_PRINTER_BUSY,
- -13848: STATUS_PRINTER_BUSY,
- -13849: STATUS_PRINTER_BUSY }
-
- def StatusType6(dev):
- info_device_status = cStringIO.StringIO()
- info_ssp = cStringIO.StringIO()
- dev.getEWSUrl('/hp/device/info_device_status.xml', info_device_status)
- dev.getEWSUrl('/hp/device/info_ssp.xml', info_ssp)
- info_device_status = info_device_status.getvalue()
- info_ssp = info_ssp.getvalue()
- device_status = { }
- ssp = { }
- if info_device_status:
-
- try:
- device_status = utils.XMLToDictParser().parseXML(info_device_status)
- log.debug_block('info_device_status', info_device_status)
- log.debug(device_status)
- except expat.ExpatError:
- log.error('Device Status XML parse error')
- device_status = { }
- except:
- None<EXCEPTION MATCH>expat.ExpatError
-
-
- None<EXCEPTION MATCH>expat.ExpatError
- if info_ssp:
-
- try:
- ssp = utils.XMLToDictParser().parseXML(info_ssp)
- log.debug_block('info_spp', info_ssp)
- log.debug(ssp)
- except expat.ExpatError:
- log.error('SSP XML parse error')
- ssp = { }
- except:
- None<EXCEPTION MATCH>expat.ExpatError
-
-
- None<EXCEPTION MATCH>expat.ExpatError
- status_code = device_status.get('devicestatuspage-devicestatus-statuslist-status-code-0', 0)
- if not status_code:
- status_code = ssp.get('devicestatuspage-devicestatus-statuslist-status-code-0', 0)
-
- black_supply_level = device_status.get('devicestatuspage-suppliesstatus-blacksupply-percentremaining', 0)
- black_supply_low = ssp.get('suppliesstatuspage-blacksupply-lowreached', 0)
- agents = []
- agents.append({
- 'kind': AGENT_KIND_TONER_CARTRIDGE,
- 'type': AGENT_TYPE_BLACK,
- 'health': 0,
- 'level': black_supply_level,
- 'level-trigger': 0 })
- if dev.tech_type == TECH_TYPE_COLOR_LASER:
- cyan_supply_level = device_status.get('devicestatuspage-suppliesstatus-cyansupply-percentremaining', 0)
- agents.append({
- 'kind': AGENT_KIND_TONER_CARTRIDGE,
- 'type': AGENT_TYPE_CYAN,
- 'health': 0,
- 'level': cyan_supply_level,
- 'level-trigger': 0 })
- magenta_supply_level = device_status.get('devicestatuspage-suppliesstatus-magentasupply-percentremaining', 0)
- agents.append({
- 'kind': AGENT_KIND_TONER_CARTRIDGE,
- 'type': AGENT_TYPE_MAGENTA,
- 'health': 0,
- 'level': magenta_supply_level,
- 'level-trigger': 0 })
- yellow_supply_level = device_status.get('devicestatuspage-suppliesstatus-yellowsupply-percentremaining', 0)
- agents.append({
- 'kind': AGENT_KIND_TONER_CARTRIDGE,
- 'type': AGENT_TYPE_YELLOW,
- 'health': 0,
- 'level': yellow_supply_level,
- 'level-trigger': 0 })
-
- return {
- 'revision': STATUS_REV_UNKNOWN,
- 'agents': agents,
- 'top-door': 0,
- 'status-code': 0,
- 'supply-door': 0,
- 'duplexer': 1,
- 'photo-tray': 0,
- 'in-tray1': 1,
- 'in-tray2': 1,
- 'media-path': 1,
- 'status-code': TYPE6_STATUS_CODE_MAP.get(status_code, STATUS_PRINTER_IDLE) }
-
-